package com.chenxys.algorithm.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * <p>
 *      数组工具类
 * </p>
 *
 * @author Chenxys
 * @version V1.0
 * @Package com.chenxys.algorithm.common
 * @date 2024/1/3 13:51
 * @Copyright ©
 */
@SuppressWarnings("all")
public class ArrUtils {

    /**
     * <p>
     *     生成随机数组
     * </p>
     * @param maxSize 数组最大长度
     * @param maxValue 数组最大值
     * @return 随机数组
     */
    public static int[] generateRandomArr(int maxSize, int maxValue) {
        int len = (int) ((Math.random()) * (maxSize + 1));
        int[] arr = new int[len];
        for (int i = 0; i < len; i++) {
            arr[i] = (int) ((Math.random()) * (maxValue + 1));
        }
        return arr;
    }

    /**
     * <p>
     *     打印数组
     * </p>
     * @param nums 整型数组
     */
    public static void printArr(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i] + "\t");
        }
        System.out.println();
    }


    /**
     * <p>
     *     生成随机有序数组
     * </p>
     * @param maxSize 数组最大长度
     * @param maxValue 数组最大值
     * @return 随机数组
     */
    public static int[] generateSortRandomArr(int maxSize, int maxValue) {
        int[] arr = generateRandomArr(maxSize, maxValue);
        Arrays.sort(arr);
        return arr;
    }

    /**
     * <p>
     *     复制数组
     * </p>
     * @param maxSize
     * @param maxValue
     * @return
     */
    public static int[] copyArr(int[] source) {
        int[] arr = new int[source.length];
        for (int i = 0; i < source.length; i++) {
            arr[i] = source[i];
        }
        return arr;
    }

    /**
     * <p>
     *     生成随机长度list集合
     * </p>
     * @param maxSize 最大长度
     * @param maxValue 最大值
     */
    public static List<Integer> generateRandomList(int maxSize, int maxValue){
        int len = (int) ((Math.random()) * (maxSize + 1));
        List<Integer> list = new ArrayList<>(len);
        for (int i = 0; i < len; i++) {
            list.add((int) ((Math.random()) * (maxValue + 1)));
        }
        return list;
    }
}
